bool judge(char c, stack<char> &st){

  if(st.empty()){
    return false;
  }
  if(c == ')' && st.top() != '('){
    return false;
  }else if(c == ']' && st.top() != '['){
    return false;
  }else if(c == '}' && st.top() != '{'){
    return false;
  }

  return true;

}

class Solution {
public:
  bool isValid(string s) {

    bool f = true;
    stack<char> st;

    for(char c : s){
      if(c == '(' || c == '[' || c == '{'){
        st.emplace(c);
      }else if(judge(c, st)){
        st.pop();
        continue;
      }else{
        f = false;
        break;
      }
    }

    if(!st.empty()){
      f = false;
    }

    return f;

  }
};